home *** CD-ROM | disk | FTP | other *** search
- #ifndef __LOCATIONINCODE__
- #define __LOCATIONINCODE__
- #pragma once
-
- #ifndef __ERRORS__
- #include <Errors.h>
- #endif
-
- //------------------------------------------------------------------------------
-
- class LocationInCode
- {
- public:
- long fLineNum; // Line number where error occurred
- char* fFileName; // File where error occurred
- // (note that __FILE__ evaluates to a global pointer)
-
- LocationInCode(
- long lineNum = 0,
- char* fileName = nil)
- :
- fLineNum(lineNum),
- fFileName(fileName)
- {
- }
-
- void AppendToString(Str255& str) const;
-
- void ThrowAEErr(
- OSStatus err,
- const char* format, ...) const;
- void Throw(
- OSStatus err) const;
- void Throw(
- OSStatus err,
- AEDesc* params) const;
- void Throw(
- OSStatus err, // an error message
- long message, // MacApp message
- AEKeyword parameter,
- DescType paramType,
- const void* paramData,
- Size paramSize) const;
-
- void ThrowTypeError(
- OSStatus err,
- DescType expectedType) const;
- void ThrowKeywordError(
- OSStatus err, //
- DescType expectedType, // In case of coercion failure, etc.
- const AEDesc& desc, // Where we were gitting data from
- AEKeyword key = 0) const;
-
- void ThrowNILResource() const;
- void ThrowNILResource(
- ResType type,
- short resID) const;
-
- OSStatus LogError(
- OSStatus err) const;
- OSStatus LogError(
- OSStatus err,
- const char* message) const;
-
- void Failure(
- OSStatus err,
- long message) const;
-
- bool DelegateAECall() const;
-
- void UserCanceled()
- {
- Throw(userCanceledErr);
- }
-
- void Failure(OSStatus err, long /*message*/)
- {
- Throw(err);
- }
-
- inline void FailOSStatus(
- OSStatus err) const
- {
- if (err != noErr)
- {
- Throw(err);
- }
- }
-
- inline void FailOSErr(
- OSErr err) const
- {
- if (err != noErr)
- { // CW Seems not to be sign extending w/o cast
- Throw((OSStatus) err);
- }
- }
-
- inline void FailNIL(
- const void* ptr,
- OSErr err = ePointerNil) const
- {
- if (ptr == nil)
- {
- Throw(err);
- }
- }
-
- inline void FailNILResource(
- const void* ptr) const
- {
- if (ptr == nil)
- {
- ThrowNILResource();
- }
- }
-
- inline void FailNILResource(
- const void* ptr,
- OSType resType,
- short resID) const
- {
- if (ptr == nil)
- {
- ThrowNILResource(resType, resID);
- }
- }
-
- inline bool ExpectedError(
- OSStatus returnTrue,
- OSStatus returnFalse,
- OSStatus error) const
- {
- if (error == returnTrue)
- {
- return true;
- }
- else
- {
- if (error != returnFalse)
- {
- Throw(error);
- }
- return false;
- }
- }
-
- inline OSStatus FailQDErr(
- OSStatus err) const
- {
- if (err < 0)
- {
- Throw(err);
- }
-
- return err;
- }
-
- inline void FailAEResult(
- OSStatus err,
- DescType type) const
- {
- if (err != noErr)
- {
- ThrowTypeError(err, type);
- }
- }
-
- inline void FailAEKeyword(
- OSStatus err,
- DescType type,
- const AEDesc& desc,
- AEKeyword key = 0) const
- {
- if (err != noErr)
- {
- ThrowKeywordError(err, type, desc, key);
- }
- }
-
- inline bool FailOptionalAEKeyword(
- OSStatus err,
- DescType type,
- const AEDesc& desc,
- AEKeyword key = 0) const
- {
- if (err != noErr)
- {
- if (err != errAEDescNotFound)
- {
- ThrowKeywordError(err, type, desc, key);
- }
- }
-
- return err != 0;
- }
-
- inline OSStatus LogIfErr(
- OSStatus errnum) const
- {
- if (errnum != noErr)
- {
- LogError(errnum);
- }
-
- return errnum;
- }
-
- inline OSStatus LogIfErr(
- OSStatus errnum,
- const char* message) const
- {
- if (errnum != noErr)
- {
- LogError(errnum, message);
- }
-
- return errnum;
- }
-
- inline OSStatus LogIfNotErr(
- OSStatus errnum,
- OSStatus expected) const
- {
- if (errnum != expected)
- {
- LogError(errnum);
- }
-
- return errnum;
- }
-
- inline OSStatus LogIfNotErr(
- OSStatus errnum,
- OSStatus expected,
- const char* message) const
- {
- if (errnum != expected)
- {
- LogError(errnum, message);
- }
-
- return errnum;
- }
-
- inline bool ValidatePointer(const void* p) const
- {
- return (p != nil) && (((long)(p) & 1) == 0);
- }
-
- inline bool ValidateHandle(const void* h) const
- {
- return ValidatePointer(h) && ValidatePointer(* (void**) h);
- }
-
- //
- //
- //
-
- #if qDebug
-
- void Warning(const char* message = nil) const;
- void AssertionFailed(const char* message = nil) const;
-
- #else
-
- inline void Warning(const char* message = nil) const { message; }
- inline void AssertionFailed(const char* message = nil) const { message; }
-
- #endif
-
- inline void WarnIf(bool truth, const char* message = nil) const
- {
- if (qDebug && truth)
- {
- Warning(message);
- }
- }
-
- inline void Assert(bool truth, const char* message = nil) const
- {
- if (qDebug && !truth)
- {
- AssertionFailed(message);
- }
- }
-
- inline void AssertPtrValid(const void* p, const char* message = nil) const
- {
- if (qDebug)
- {
- Assert(ValidatePointer(p), message);
- }
- }
-
- inline void AssertHandleValid(const void* h, const char* message = nil) const
- {
- if (qDebug)
- {
- Assert(ValidateHandle(h), message);
- }
- }
-
- //
- //
- //
-
- void RequirementNotMet(const char* message = nil) const;
-
- inline void Require(bool truth, const char* message = nil) const
- {
- if (!truth)
- {
- RequirementNotMet(message);
- }
- }
-
- inline void RequirePtrValid(const void* p, const char* message = nil) const
- {
- Require(ValidatePointer(p), message);
- }
-
- inline void RequireHandleValid(const void* h, const char* message = nil) const
- {
- Require(ValidateHandle(h), message);
- }
-
- };
-
- #endif // __LOCATIONINCODE__
-